97 词
Vue 路由-重定向#问题:网页打开,url 默认是/路径,未匹配到组件时,会出现空白说明:重定向-匹配到 path 后,强制跳转 path 路径语法: 12345{ path:匹配路径, redirect:重定向到的路径, // ...} 12345678const router = new VueRouter({ routes: [ // 访问到/时重定向到/home { path: '/', redirect: '/home' }, { path: '/home', component: Home }, { path: '/search/:words?', component: Search }, ],});
1.3k 词
声明式导航#导航链接#需求:实现导航高亮效果vue-router提供了一个全局组件router-link(取代a标签) 12<a href="#/find">发现音乐</a><router-link to="/find">发现音乐</router-link> 能跳转,配置to属性指定路径(必须)。本质还是a标签,**to无需加#** 能高亮,默认就会提供高亮类名,可以直接设置高亮样式 在将原本导航栏的a标签替换为router-link组件后,可以发现,渲染到页面后,组件还是被解析为了a标签,不过上面多了两个类此时要添加高亮样式,就只需通过这两个类任意一个指定其样式即可,例如: 123.footer_wrap a.router-link-active { background-color: #ff3555;} 两个类名#在上面发现router-link自动给当前导航添加了两个高亮类名 router-link-active模糊匹配(用的多)to="/m...
320 词
路由模块封装#以我的音乐应用为例所有的路由配置都放在main.js中是不合适的最好将路由模块抽离出来,拆分模块,利于维护将路由相关部分代码抽出来放到router/index.js中,用export default router导出,在main.js中用import导入使用tips:拆分路由模块后,原本由路由管理的组件路径需要修改,为了避免目录层级问题,建议使用绝对路径导入组件,vue 中使用@指代src,例如: 123import Find from '../views/Find.vue';// 改为:import Find from '@/views/Find'; 完整代码:src/router/index.js: 123456789101112131415161718192021222324252627// 路由的使用步骤 5+2// 5个基础步骤// 2个核心步骤// 1.1.下载v3.6.5// 1.2.引入import VueRouter from 'vue-router';import ...
1.2k 词
单页应用程序&路由#单页应用程序 SPA-Single Page Application# 单页面应用(SPA):所有功能在一个 html 页面上实现 具体示例:网易云音乐https://music.163.com/多页面应用比如京东淘宝 开发分类 实现方式 页面性能 开发效率 用户体验 学习成本 首屏加载 SEO 单页 一个 html 页面 按需更新性能高 高 非常好 高 慢 差 多页 多个 html 页面 整页更新性能低 中等 一般 中等 快 优 单页面应用:系统类网站/内部网站/文档类网站/移动端站点多页面应用:公司官网/电商类网站 路由#单页应用程序开发效率高,性能好,用户体验好,最大的原因就是:页面按需更新要按需更新,首先就需要明确:访问路径和组件的对应关系,就需要用到路由生活中的路由:设备和 ip 的映射关系Vue 中的路由:路径和组件的映射关系首页 http://localhost:8080/#/home评论 http://localhost:8080/#/comment搜索 http://loc...
1.3k 词
案例-商品列表#效果: 需求说明# my-tag标签组件封装 双击显示输入框,输入框获取焦点 失去焦点,隐藏输入框 回显标签信息 内容修改,回车修改标签信息 my-table表格组件封装 动态传递表格数据渲染 表头支持用户自定义 主体支持用户自定义 实现#my-tag组件封装# 双击显示输入框,输入框获取焦点标题及输入框用v-if和v-else通过编辑状态的修改,来控制二者的显示隐藏标题盒子绑定双击事件@dblclick,修改编辑状态为true输入框获得焦点: $nextTick+$refs获取到 dom,进行focus获取焦点 通过全局注册自定义指令v-focus的方式实现 12345678910111213import Vue from 'vue';import App from './App.vue';Vue.config.productionTip = false;// 全局注册指令focusVue.directive('focus', { inserted(el) { ...
1.2k 词
插槽#默认插槽#作用:让组件内部的一些结构支持自定义需求:在页面中显示一个对话框,封装为一个组件组件的内容部分,不希望写死,希望能在使用时自定义提示内容 插槽基本语法# 组件内需要定制的结构部分,改用<slot></slot>占位 使用组件时,<MyDialog></MyDialog>标签内部,传入结构替换slot 例:MyDialog.vue: 12345678910111213141516<template> <div class="dialog"> <div class="dialog-header"> <h3>友情提示</h3> <span class="close">x</span> </div> <div class="dialog-content"...
750 词
自定义指令#内置指令: v-html v-model v-for … 自定义指令: v-focus v-loading v-lazy … 每个指令都有各自独立的功能自定义指令:自己定义的指令,可以封装一些 dom 操作,扩展额外功能 实例:元素获得焦点#需求:当页面加载时,让元素获得焦点(autofocus在 safari 浏览器有兼容性问题)操作 dom:dom 元素.focus()方式比较麻烦 123mounted(){ this.$refs.inp.focus()} 注册自定义指令语法# 全局注册(main.js 中注册) 1234567Vue.directive('指令名', { // inserted会在指令所在的元素被插入到页面中时触发 inserted(el) { // el就是指令所绑定的元素,可以对el标签扩展额外功能 el.focus(); },}); 局部注册(组件内注册) 12345678directives...
255 词
Vue 异步更新和$nextTick#异步更新#需求:编辑标题,编辑框自动聚焦案例结构: 12345678<div v-if="isShowEdit"> <input type="text" v-model="editValue" ref="inp" /> <button>确认</button></div><div v-else> <span>{{ title }}</span> <button @click="handleEdit">编辑</button></div> 数据: 1234567data() { return { title: '大标题', isShowEdit: false, edit...
140 词
ref 和$refs#作用:利用ref和$refs可以用于获取 dom 元素或组件实例特点:查找范围为当前组件内(更精确稳定) 获取 dom: 目标标签-添加 ref 属性 1<div ref="chartRef">图表容器</div> 恰当时机,通过this.$refs.xxx,获取目标标签 123mounted(){ console.log(this.$refs.chartRef)} 获取组件: 目标组件-添加ref属性 1<BaseForm ref="baseForm"></BaseForm> 恰当时机,通过this.$refs.xxx,获取目标组件,就可以调用组件对象里面的方法 1this.$refs.baseForm.组件方法();
129 词
.sync 修饰符#作用:可以实现子组件与父组件数据的双向绑定,简化代码,作用与v-model一致特点:prop属性名,可以自定义,非固定为value,v-model固定使用value可读性不高场景:封装弹框类的基础组件,visible属性 true 显示 false 隐藏本质:就是:属性名和@update:属性名合写父组件(使用): 12<BaseDialog :visible.sync="isShow"></BaseDialog><BaseDialog :visible="isShow" @update:visible="isShow=$event"></BaseDialog> 子组件(封装): 12345678props:{ visible:Boolean},methods:{ close(){ this.$emit('update:visible',false) }...